package com.itcast.reflect;

import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Properties;

/**
 * 框架类
 */
public class ReflectTest {
    public static void main(String[] args) throws IOException, ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, InvocationTargetException {
        // 可以创建任意类的对象，可以执行任意方法

        // 1.加载配置文件
        Properties properties = new Properties();
        // 获取文件路径
        ClassLoader classLoader = ReflectTest.class.getClassLoader();
        InputStream resourceAsStream = classLoader.getResourceAsStream("pro.properties");
        properties.load(resourceAsStream);

        // 2.获取配置文件中的数据
        Object className = properties.get("className");
        Object methodName = properties.get("methodName");

        // 3.加载该类加载进内存
        Class<?> aClass = Class.forName((String) className);
        // 创建对象
        Object o = aClass.newInstance();
        // 获取方法对象
        Method method = aClass.getMethod((String) methodName);
        // 执行方法
        method.invoke(o);

    }
}
